/**
 * Project litesql++
 */


#ifndef _SQLITEDB_H
#define _SQLITEDB_H

#include <string>
#include "sqlite3.h"
#include "content_values.h"
#include "sqlite_table.h"

using std::string;

class SQLiteDB {
public: 

    SQLiteDB();

    SQLiteDB(const string& db_file);

    ~SQLiteDB();
    /**
     * @param db_file
     */
    const int Open(const string& db_file);
    
    /**
     * @param sqlite_table
     */
    const int Create(const SQLiteTable& sqlite_table);
    
    /**
     * @param table_name
     * @param columns
     */
    const int Create(const string& table_name, const string& columns);
    
    /**
     * @param table_name
     * @param values
     */
    const int Insert(const string& table_name, const ContentValues& values);
    
    /**
     * @param table_name
     * @param values
     * @param where_condition
     */
    const int Update(const string& table_name, const ContentValues& values, const string& where_condition);
    
    /**
     * @param table_name
     * @param where_condition
     */
    const int Delete(const string& table_name, const string& where_condition);
    
    /**
     * @param statement
     */
    const int ExecSQL(const string& statement);
    
    const int Begin();
    
    const int Commit();
    
    const int RollBack();

    const string SQLiteCodeAsString(int error_code);

private:
    sqlite3* sqlite3_handler_;

};

#endif //_SQLITEDB_H
